package com.tang.basics.introductory;

import java.util.Scanner;//导入

public class ProgramControl_10 {
    public static void main(String[] args){
        ContinueDetail.demo();
    }
}


/*
 * 分支控制 if-else
 * 让程序有选择的的执行,分支控制有三种
 * 单分支 if
 * 双分支 if-else
 * 多分支 if-else if -....-else
 * */

class IfDemo {
    public static void ifo1() {
        //编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁
        //则输出 "你年龄大于 18,要对自己的行为负责,送入监狱
        //1. 接收输入的年龄, 应该定义一个 Scanner 对象
        // 2. 把年龄保存到一个变量 int age //
        // 3. 使用 if 判断，输出对应信息
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入年龄");
        //把年龄保存到一个变量 int age
        int age = myScanner.nextInt();
        //使用 if 判断，输出对应信息
        if (age > 18) {
            System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
        }
        System.out.println("程序继续...");

    }

    public static void ifIf02() {
        //编写一个程序,可以输入人的年龄,如果该同志的年龄大于 18 岁,
        //则输出 "你年龄大于 18,要对
        //自己的行为负责, 送入监狱"。否则 ,输出"你的年龄不大这次放过你了."

        //应该定义一个 Scanner 对象
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入年龄");
        //把年龄保存到一个变量 int age
        int age = myScanner.nextInt();
        //使用 if-else 判断，输出对应信息
        if (age > 18) {
            System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
        } else {
            //双分支
            System.out.println("你的年龄不大这次放过你了");
        }
        System.out.println("程序继续...");
    }

    public static void nestedIf() {
        /*参加歌手比赛，如果初赛成绩大于 8.0 进入决赛， 否则提示淘汰。并且根据性别提示进入男子组或女子组。
        输入成绩和性别，进行判断和输出信息。
        [NestedIf.java] 提示: double score; char gender; 接收字符: char gender = scanner.next().charAt(0) */
        //思路分析
        // 1. 创建 Scanner 对象，接收用户输入
        // 2. 接收 成绩保存到 double score
        // 3. 使用 if-else 判断 如果初赛成绩大于 8.0 进入决赛，否则提示淘汰
        // 4. 如果进入到 决赛，再接收 char gender, 使用 if-else 输出信息
        // 代码实现 => 思路 --> java 代码
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入该歌手的成绩");
        double score = myScanner.nextDouble();
        if (score > 8.0) {
            System.out.println("请输入性别");
            char gender = myScanner.next().charAt(0);
            if (gender == '男') {
                System.out.println("进入男子组");
            } else if (gender == '女') {
                System.out.println("进入女子组");
            } else {
                System.out.println("你的性别有误，不能参加决赛~");
            }
        } else {
            System.out.println("sorry ,你被淘汰了~");
        }

    }
}



/*
 * switch 分支结构
 * 1.switch
 *
 * */

class Switch01 {
    public static void demo() {
        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入一个字符(a-g)");
        char c1 = myScanner.next().charAt(0);//
        //在 java 中，只要是有值返回，就是一个表达式
        switch (c1) {
            case 'a':
                System.out.println("今天星期一,猴子穿新衣");
                break;
            case 'b':
                System.out.println("今天星期二,猴子当小二");
                break;
            case 'c':
                System.out.println("今天星期三,猴子爬雪山..");
                break;
            default:
                System.out.println("你输入的字符不正确，没有匹配的");
        }
    }
}


/*
* For01
* 1. for 关键字，表示循环控制
* 2. for 有四要素:
* (1)循环变量初始化
* (2)循环条件
* (3)循环操作
* (4)循环变量迭代
* 3. 循环操作 , 这里可以有多条语句，也就是我们要循环执行的代码
* 4. 如果 循环操作(语句) 只有一条语句，可以省略 {}, 建议不要省略
*
* */


class ForExercise {
    public static void demo(){
        //打印 1~100 之间所有是 9 的倍数的整数，统计个数 及 总和.[化繁为简,先死后活]
        //1. 化繁为简 : 即将复杂的需求，拆解成简单的需求，逐步完成 编程 = 思想 --练习-> 代码
        //2. 先死后活 : 先考虑固定的值，然后转成可以灵活变化的值

        //思路分析
        //打印 1~100 之间所有是 9 的倍数的整数，统计个数 及 总和
        //化繁为简
        //(1) 完成 输出 1-100 的值
        //(2) 在输出的过程中，进行过滤，只输出 9 的倍数 i % 9 ==0
        //(3) 统计个数 定义一个变量 int count = 0; 当 条件满足时 count++;
        //(4) 总和 , 定义一个变量 int sum = 0; 当条件满足时累积 sum += i;
        //先死后活
        //(1) 为了适应更好的需求，把范围的开始的值和结束的值，做出变量
        //(2) 还可以更进一步 9 倍数也做成变量 int t = 9;
        int count = 0; //统计 9 的倍数个数 变量
        int sum = 0; //总和
        int start = 10;
        int end = 200;
        int t = 5; // 倍数
        for(int i = start; i <= end; i++) {
            if( i % t == 0) {
                System.out.println("i=" + i);
                count++;
                sum += i;//累积
                 }

        }
        System.out.println("count=" + count);
        System.out.println("sum=" + sum);

        int n =0;
        for(int i = 0;i<=n;i++){
            System.out.println(i + "+" + (n-i) + "=" + n);
        }
    }

    public static void demo2(){
        for(int i = 0; i < 2; i++) {
            //先思考
            for( int j = 0; j < 3; j++) {
                System.out.println("i=" + i + "j=" + j);
            }
        }
    }
}



/*
* while 循环执行流程
*
*
* */


class While01 {
    public static void demo() {
        int i = 1; //循环变量初始化
        while (i <= 10) {
            //循环条件
            System.out.println("你好，韩顺平教育" + i);
            //执行语句
            i++;
            // 循环变量迭代
        }
        System.out.println("退出 while ，继续.." + i); // 11
    }
}



/*
* do..while 循环控制
*
* */

class DoWhileExercise01{
    public static void demo(){
        //统计 1---200 之间能被 5 整除但不能被 3 整除的 个数
        //(1) 使用 do-while 输出 1-200
        //(2) 过滤 能被 5 整除但不能被 3 整除的数 %
        //(1) 范围的值 1-200 你可以做出变量
        // (2) 能被 5 整除但不能被 3 整除的 , 5 和 3 可以改成变量 int i = 1; int count = 0; //统计满足条件的个数
        int i = 1;
        int count = 0; //统计满足条件的个数
        do {
            if( i % 5 == 0 && i % 3 != 0 ) {
                System.out.println("i=" + i);
                count++;
            }i++;
        }while(i <= 200);
        System.out.println("count=" + count);
    }

}


/*
* 跳转控制语句-break
*
* */

class BreakExercise{
    public static void demo(){
        //1-100 以内的数求和，求出 当和 第一次大于 20 的当前数 【for + break】
        //思路分析 //1. 循环 1-100, 求和 sum
        // 2. 当 sum > 20 时，记录下当前数，然后 break
        // 3. 在 for 循环外部，定义变量 n , 把当前 i 赋给 n
        int sum = 0; //累积和
        int n = 0;
        for(int i = 1; i <= 100; i++) {
            sum += i;//累积
            if(sum > 20) {
                System.out.println("和>20 时候 当前数 i=" + i);
                n = i;
                break;
            }
        }
        System.out.println("当前数=" + n);
    }
}


/*
* 跳转控制语句-continue
* continue 语句用于结束本次循环，继续执行下一次循环
* continue 语句出现在多层嵌套的循环语句体中时，可以通过标签指明要跳过的是哪一层循环 , 这个和前面的标签的 使用的规则一样
* */


class ContinueDetail{
    public static void demo(){
        label1:
        for(int j = 0; j < 4; j++){
            label2:
            for(int i = 0; i < 10; i++){
                if(i == 2){
                    //看看分别输出什么值，并分析
                    // continue ;
//                     continue label2;
//                    continue label1;
                    }
                System.out.println("i = " + i); } }
    }
}



